home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Transactor
/
Transactor_22_1988_Transactor_Publishing.d64
/
fn parser.pal
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2023-02-26
|
5KB
|
229 lines
1000 sys700
1010 ;*********************************
1020 ;* file-spec parser *
1030 ;* sep 21, 1987 version 1.0 *
1040 ;* *
1050 ;* keath milligan *
1060 ;* 11909 swan drive *
1070 ;* austin, tx 78750 *
1080 ;* (512) 331-8451 *
1090 ;*********************************
1100 ;
1110 ;
1120 .opt oo
1130 ;
1140 fnlen = $b7
1150 la = $b8
1160 sa = $b9
1170 fa = $ba
1180 fnadr = $bb
1190 aptr = $03
1200 bptr = $05
1210 ;
1220 lda #<openbp
1230 ldy #>openbp
1240 sta 794
1250 sty 795
1260 lda #<loadbp
1270 ldy #>loadbp
1280 sta 816
1290 sty 817
1300 lda #<savebp
1310 ldy #>savebp
1320 sta 818
1330 sta 819
1340 rts
1350 ;
1360 openbp jsr parse
1370 jmp $f34a
1380 ;
1390 loadbp pha
1400 jsr parse
1410 pla
1420 jmp $f4a5
1430 ;
1440 savebp jsr parse
1450 jmp $f5ed
1460 ;
1470 ;*** parse routine ***
1480 ;
1490 parse lda fnadr
1500 sta fnptr+1
1510 lda fnadr+1
1520 sta fnptr+2
1530 lda fa
1540 sta tdev
1550 lda sa
1560 sta tsa
1570 lda fnlen
1580 sta ctr
1590 jsr getfchr
1600 cmp #"#"
1610 beq checkfn
1620 cmp #"d"
1630 beq checkfn
1640 cmp #"p"
1650 bne chkdev
1660 checkfn ldx #0
1670 sta tdname
1680 getnext jsr getfchr
1690 sta tsep
1700 cmp #":"
1710 beq fnok
1720 cmp #","
1730 beq fnok
1740 cmp #"0"
1750 bcc chkdev
1760 cmp #"9"+1
1770 bcs chkdev
1780 inx
1790 cpx #3
1800 bne gnext
1810 chkdev lda fnlen
1820 beq parsex
1830 lda fa
1840 cmp #1
1850 bne parsex
1860 lda #8 ;default drive
1870 sta fa
1880 parsex rts
1890 gnext bne getnext
1900 fnok cpx #0 ;# of digits
1910 beq chkdev
1920 lda fnadr
1930 sta fnptr+1
1940 lda fnadr+1
1950 sta fnptr+2
1960 lda fnlen
1970 sta ctr
1980 ;get pointer on device number
1990 jsr getfchr
2000 lda fnptr+1
2010 sta aptr
2020 lda fnptr+2
2030 sta aptr+1
2040 txa
2050 jsr asc2wor
2060 bcs passit
2070 lda bptr ;device number
2080 sta tdev
2090 iloop jsr getfchr
2100 parsec cmp #":"
2110 beq finishfs
2120 cmp #","
2130 beq chksa
2140 bne iloop
2150 finishfs lda fnptr+1
2160 sta fnadr
2170 lda fnptr+2
2180 sta fnadr+1
2190 lda ctr
2200 sta fnlen
2210 lda tsa
2220 sta sa
2230 lda tdev
2240 sta fa
2250 cmp #1
2260 bne passit
2270 rts
2280 passit jmp chkdev
2290 chksa ldx #0
2300 lda fnptr+1
2310 sta aptr
2320 lda fnptr+2
2330 sta aptr+1
2340 csaloop jsr getfchr
2350 cmp #":"
2360 beq csaout
2370 inx
2380 cpx #4
2390 beq csaerr
2400 cmp #"0"
2410 bcc csaerr
2420 cmp #"9"+1
2430 bcc csaloop
2440 csaerr rts
2450 csaout txa
2460 beq csaerr
2470 jsr asc2wor
2480 lda bptr
2490 sta tsa
2500 jmp finishfs
2510 ;
2520 getfchr = *
2530 fnptr lda $ffff ;dummy addr
2540 and #%01111111 ;mask high-bit
2550 inc fnptr+1
2560 bne gfc
2570 inc fnptr+2
2580 gfc dec ctr
2590 cmp #0
2600 rts
2610 ;
2620 tdev .byt 0
2630 tsa .byt 0
2640 tdname .byt 0
2650 ctr .byt 0
2660 tsep .byt 0
2670 ;
2680 ;*********************************
2690 ;* convert decimal ascii to word *
2700 ;* .a = length of string *
2710 ;* aptr points to string *
2720 ;* ret- bptr = 16 bit word *
2730 ;* cs = error, cc = ok *
2740 ;*********************************
2750 ;
2760 ;
2770 asc2wor sta declen
2780 lda #0
2790 tay
2800 ldx declen
2810 sta bptr
2820 sta bptr+1
2830 clc
2840 asc2wor1 jsr by10 ;multiply by 10
2850 bcs asc2worx ;cs - overflow
2860 lda (aptr),y
2870 and #%00001111
2880 clc
2890 adc bptr
2900 sta bptr
2910 bcc asc2wor2
2920 inc bptr+1
2930 sec
2940 beq asc2worx ;eq - overflow
2950 asc2wor2 clc
2960 iny
2970 dex
2980 bne asc2wor1
2990 asc2worx rts
3000 ;
3010 ; by10- multiply by 10
3020 ;
3030 by10 asl bptr ;x 2
3040 rol bptr+1
3050 bcs by10r ;cs - overflow
3060 lda bptr+1
3070 pha
3080 lda bptr
3090 pha
3100 asl bptr ;x 2
3110 rol bptr+1
3120 bcs by10x ;cs - overflow
3130 asl bptr ;x 2
3140 rol bptr+1
3150 bcs by10x ;cs - overflow
3160 pla
3170 adc bptr
3180 sta bptr
3190 pla
3200 adc bptr+1
3210 sta bptr+1
3220 by10r rts
3230 by10x pla
3240 pla
3250 rts
3260 ;
3270 declen .byt 0